#pragma once
#ifndef _LPE_RESMAN_RESOURCE_H_
#define _LPE_RESMAN_RESOURCE_H_

#include "core/core_utils.h"


namespace lpe {
	namespace resman {

		class XMLNodeTree;

		class Resource {
		public:
			Resource();
			virtual ~Resource();
			const uint32_t getID() const;
			/**
			 * Inicializa el recurso con la ID y el contenido del XML.
			 * @param id Es el ID unico que toma el objeto. No cambiara a lo largo del programa a menos que se llame a initialize. Si es 0 se le asigna uno por defecto.
			 * @param xnode Son los datos del xml cargados en memoria. Una vez sale de la funcion initialize el comportamiento de *xnode es indefinido
			 * asi que es mejor no conservar el puntero o hacer una copia del contenido.
			 */
			virtual void initialize(uint32_t id, XMLNodeTree* xnode, const std::string& appender = "[RESMAN]");
			virtual void clone(const Resource& res, const uint32_t id);
			uint32_t getResourceType();
			const std::string getFileName();
		private:
			// Evitar copias del objeto
			DISALLOW_COPY_AND_ASSIGN(Resource);
			/// Ruta completa del archivo donde guardamos datos del recurso (puede estar vacio)
			std::string m_fileName;
			/// Metadatos que perfilan el recurso
			boost::unordered_map<std::string, std::string> m_metadata;
			/// El id del recurso
			uint32_t m_id;
			/// El tipo del recurso. Esto muestra al sistema qué loader debe usar cargarlo. Si es 0 se asume que no se va a cargar con ningun loader especial
			uint32_t m_resType;
			static std::string DEF_APPENDER;
		};

	}
}

#endif //_LPE_RESMAN_RESOURCE_H_
